import time

#普通版
def calculate_time(func):
    #这里要考虑是改写func，还是对func进行一些处理：把func加入到列表之类的
    #写在这里是@calculate_time这样写之后就会执行
    def wrapper(*args,**kwargs):
        before = time.time()
        func(*args,**kwargs)
        after = time.time()
        print(f'函数{func.__name__} 运行耗时: {after-before:>8.5f} 秒')
    return wrapper

@calculate_time
def example_func(n):
    time.sleep(n)  # 模拟耗时操作
    print(f"任务完成，耗时设定为 {n} 秒")

example_func(2)  # 调用后应输出类似：函数 example_func 运行耗时: 2.001秒


#指定参数版
# @calculate_time(unit="ms")  # 输出：函数 example_func 运行耗时: 2003.000毫秒
def calculate_time1(unit='s'):
    def decorator(func):
        def wrapper(*args,**kwargs):
            before = time.time()
            func(*args,**kwargs)
            after = time.time()
            if unit == 's':
                print(f'函数{func.__name__} 运行耗时: {after-before:>8.5f} 秒')
            elif unit == 'ms':
                print(f'函数{func.__name__} 运行耗时: {(after-before)*1000:>8.5f} 毫秒')

        return wrapper
    return decorator


@calculate_time1(unit="ms")
def example_func(n):
    time.sleep(n)  # 模拟耗时操作
    print(f"任务完成，耗时设定为 {n} 秒")

example_func(2) 